/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package presentacion.utilidad.tabla;

import hibernate.objeto.AntecedenteFamiliar;
import hibernate.objeto.AntecedentePersonal;
import hibernate.objeto.AplicacionVacuna;
import hibernate.objeto.Cie9mc;
import hibernate.objeto.DiagnosticoYTriageInternacion;
import hibernate.objeto.Documento;
import hibernate.objeto.EnfermedadYDiagnosticoAmbulatorio;
import hibernate.objeto.Evolucion;
import hibernate.objeto.EvolucionEnfermeriaDeInternacion;
import hibernate.objeto.ExamenComplementario;
import hibernate.objeto.Farmacologico;
import hibernate.objeto.GrupoTerapeuticoMedicamento;
import hibernate.objeto.Interconsulta;
import hibernate.objeto.LaboratorioMedicamento;
import hibernate.objeto.NoFarmacologico;
import hibernate.objeto.NombreComercialMedicamento;
import hibernate.objeto.ObraSocial;
import hibernate.objeto.Paciente;
import hibernate.objeto.Persona;
import hibernate.objeto.PrincipioActivoMedicamento;
import hibernate.objeto.TratamientoMedicamentoso;
import hibernate.objeto.TratamientoYPractica;
import hibernate.objeto.Usuario;
import hibernate.objeto.Vacuna;
import java.awt.Rectangle;
import java.util.Collections;
import java.util.Comparator;
import java.util.Vector;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableRowSorter;
import logica.AntecedenteFamiliarLogica;
import logica.AntecedentePersonalLogica;
import logica.AplicacionVacunaLogica;
import logica.Cie9mcLogica;
import logica.DiagnosticoYTriageInternacionLogica;
import logica.DocumentoLogica;
import logica.EnfermedadYDiagnosticoAmbulatorioLogica;
import logica.EvolucionEnfermeriaDeInternacionLogica;
import logica.EvolucionLogica;
import logica.ExamenComplementarioLogica;
import logica.FarmacologicoLogica;
import logica.GrupoTerapeuticoMedicamentoLogica;
import logica.InterconsultaLogica;
import logica.LaboratorioMedicamentoLogica;
import logica.NoFarmacologicoLogica;
import logica.NombreComercialMedicamentoLogica;
import logica.ObraSocialLogica;
import logica.PacienteLogica;
import logica.PersonaLogica;
import logica.PrincipioActivoMedicamentoLogica;
import logica.TratamientoYPracticaLogica;
import logica.UsuarioLogica;
import logica.VacunaLogica;
import presentacion.CapaPresentacion;
import presentacion.evolucion.InterconsultaPresentacion;
import presentacion.utilidad.maquetado.Fuente;

/**
 *
 * @author Administrador
 */
public class MiModeloTabla extends DefaultTableModel {

    /**
     * Carga la tabla de Persona con los objetos pasados por parámetro.
     *
     * @param vectorObjetos Las personas a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaPersona(
            Vector<Persona> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Documento", "Apellido", "Nombre",
                              "Fecha de nacimiento", "Teléfono particular",
                              "Teléfono móvil"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                //id
                filas[i][0] = vectorObjetos.get(i).getIdPersona();
                //Documento
                filas[i][1] = CapaPresentacion.imprimirDocumento(
                        vectorObjetos.get(i));
                //Apellido
                filas[i][2] = vectorObjetos.get(i).getApellidoPersona();
                //Nombre
                filas[i][3] = vectorObjetos.get(i).getNombrePersona();
                //Fecha
                filas[i][4] = CapaPresentacion.imprimirFecha(
                        vectorObjetos.get(i).getFechaDeNacimientoPersona());
                //Teléfono particular
                filas[i][5] = vectorObjetos.get(i).getTelefonoParticularPersona();
                //Teléfono movil
                filas[i][6] = vectorObjetos.get(i).getTelefonoMovilPersona();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 2, true);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(Persona.class.getName(), tabla);
        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));        
    }

    /**
     * Carga la tabla de Persona con los objetos pasados por parámetro.
     *
     * @param vectorObjetos Las personas a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaPaciente(
            Vector<Paciente> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Documento", "Apellido", "Nombre",
                              "Fecha de nacimiento", "Teléfono particular",
                              "Teléfono móvil"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                //id
                filas[i][0] = vectorObjetos.get(i).getIdPaciente();
                //Documento
                filas[i][1] = CapaPresentacion.imprimirDocumento(
                        vectorObjetos.get(i).getPersona());
                //Apellido
                filas[i][2] = vectorObjetos.get(i).getPersona().getApellidoPersona();
                //Nombre
                filas[i][3] = vectorObjetos.get(i).getPersona().getNombrePersona();
                //Fecha
                filas[i][4] = CapaPresentacion.imprimirFecha(
                        vectorObjetos.get(i).getPersona().getFechaDeNacimientoPersona());
                //Teléfono particular
                filas[i][5] =
                        vectorObjetos.get(i).getPersona().getTelefonoParticularPersona();
                //Teléfono movil
                filas[i][6] =
                        vectorObjetos.get(i).getPersona().getTelefonoMovilPersona();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(Paciente.class.getName(), tabla);
        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }
    
    /**
     * Carga la tabla de ObraSocial con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos ObraSocial a
     * cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaObraSocial(
            Vector<ObraSocial> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Nombre"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] = vectorObjetos.get(i).getIdObraSocial();
                filas[i][1] = vectorObjetos.get(i).getDetalleObraSocial();
            }
        }

        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);

        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de Cie9mc con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos Cie9mc a cargar
     * @param tabla La tabla a cargar
     *
     */
    public static void cargarTablaCie9mc(
            Vector<Cie9mc> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"Código", "Enfermedad"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] = vectorObjetos.get(i).getCodigoCie9mc().toUpperCase();
                filas[i][1] = vectorObjetos.get(i).getDetalleCie9mc();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);

        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(Cie9mc.class.getName(), tabla);
    }

    /**
     * Carga la tabla de Vacuna con los objetos pasados por parámetro.
     *
     * @param vectorObjetos Las vacunas a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaVacuna(
            Vector<Vacuna> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Vacuna"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
            ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                if (vectorObjetos.get(i) != null) {
                    filas[i][0] = vectorObjetos.get(i).getIdVacuna();
                    filas[i][1] = vectorObjetos.get(i).getNombreVacuna();
                } else {
                    filas[i][0] = "";
                }
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, true);
        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de AplicacionVacuna con los objetos pasados por parámetro.
     *
     * @param vectorObjetos Las aplicaciones de vacunas a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaAplicacionVacuna(
            Vector<AplicacionVacuna> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "fechaEnString", "Fecha", "Vacuna",
                                "Período de aplicación"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                if (vectorObjetos.get(i) != null) {
                    filas[i][0] = vectorObjetos.get(i).getIdAplicacionVacuna();
                    filas[i][1] = vectorObjetos.get(i).
                            getFechaPeriodoAplicacionVacuna().toString();
                    filas[i][2] = CapaPresentacion.imprimirFecha(
                            vectorObjetos.get(i).getFechaPeriodoAplicacionVacuna());
                    filas[i][3] = vectorObjetos.get(i).getPeriodoAplicacionVacuna().
                            getVacuna().getNombreVacuna();
                    filas[i][4] = vectorObjetos.get(i).getPeriodoAplicacionVacuna().
                            getDescripcionPeriodoAplicacionVacuna();
                } else {
                    filas[i][1] = "";
                }
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de la fila tablas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, true);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(AplicacionVacuna.class.getName(), tabla);
        //Esconde la columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de NombreComercialMedicamento con los objetos pasados por
     * parámetro.
     *
     * @param vectorObjetos Los medicamentos a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaNombreComercialMedicamento(
            Vector<NombreComercialMedicamento> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Nombre comercial"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                //Nombre comercial
                filas[i][0] = vectorObjetos.get(i).
                        getIdNombreComercialMedicamento();
                filas[i][1] = vectorObjetos.get(i).
                        getNombreNombreComercialMedicamento();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);

        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de PrincipioActivoMedicamento con los objetos pasados por
     * parámetro.
     *
     * @param vectorObjetos Los principios activos a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaPrincipioActivoMedicamento(
            Vector<PrincipioActivoMedicamento> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Principio activo"};
            //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                //Principio activo
                filas[i][0] = vectorObjetos.get(i).
                        getIdPrincipioActivoMedicamento();
                filas[i][1] = vectorObjetos.get(i).
                        getNombrePrincipioActivoMedicamento();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de LaboratorioMedicamento con los objetos pasados por
     * parámetro.
     *
     * @param vectorObjetos Los laboratorios a cargar
     * @param tanla La tabla a cargar
     */
    public static void cargarTablaLaboratorioMedicamento(
            Vector<LaboratorioMedicamento> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Laboratorio"};
            //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                //Laboratorio
                if (vectorObjetos.get(i) != null) {
                    filas[i][0] = vectorObjetos.get(i).
                            getIdLaboratorioMedicamento();
                    filas[i][1] = vectorObjetos.get(i).
                            getNombreLaboratorioMedicamento();
                } else {
                    filas[i][1] = "";
                }
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de GrupoTerapeuticoMedicamento con los objetos pasados por
     * parámetro.
     *
     * @param vectorObjetos Los grupos terapeuticos a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaGrupoTerapeuticoMedicamento(
            Vector<GrupoTerapeuticoMedicamento> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Grupo terapéutico"};
            //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                //Grupo terapéutico
                if (vectorObjetos.get(i) != null) {
                    filas[i][0] = vectorObjetos.get(i).
                            getIdGrupoTerapeuticoMedicamento();
                    filas[i][1] = vectorObjetos.get(i).
                            getNombreGrupoTerapeuticoMedicamento();
                } else {
                    filas[i][1] = "";
                }
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de Cie9mc con los objetos pasados por parámetro.
     *
     * @param vectorEnfermedadYDiagnostico El vector que contiene las objetos
     * EnfermedadYDiagnosticoAmbulatorio a cargar
     * @param vectorAntecedentePersonal El vector que contiene las objetos
     * AntecedentePersonal a cargar
     * @param vectorAntecedenteFamiliar El vector que contiene las objetos
     * AntecedenteFamiliar a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaEnfermedadAmbulatorio(
            Vector<EnfermedadYDiagnosticoAmbulatorio> vectorEnfermedadYDiagnostico,
            Vector<AntecedentePersonal> vectorAntecedentePersonal,
            Vector<AntecedenteFamiliar> vectorAntecedenteFamiliar, JTable tabla) {
        Object[][] filas = null;
        Object[] columnas = {"id", "fechaEnString", "Fecha", "Enfermedad",
                                "Vínculo", "Estado"};
        //Vector nulo
        if ((vectorEnfermedadYDiagnostico == null || vectorEnfermedadYDiagnostico.isEmpty()) &&
                (vectorAntecedentePersonal == null || vectorAntecedentePersonal.isEmpty()) &&
                (vectorAntecedenteFamiliar == null || vectorAntecedenteFamiliar.isEmpty())) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";

        } else if (vectorEnfermedadYDiagnostico != null) {
            //Vector de enfermedad y diagnostico
            filas = new Object[vectorEnfermedadYDiagnostico.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorEnfermedadYDiagnostico.size(); i++) {
                filas[i][0] = vectorEnfermedadYDiagnostico.get(i).
                        getIdEnfermedadYDiagnosticoAmbulatorio();
                filas[i][1] = vectorEnfermedadYDiagnostico.
                        get(i).getFechaEnfermedadYDiagnosticoAmbulatorio().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(vectorEnfermedadYDiagnostico.
                        get(i).getFechaEnfermedadYDiagnosticoAmbulatorio());
                filas[i][3] = vectorEnfermedadYDiagnostico.get(i).getCie9mc().getDetalleCie9mc();
                filas[i][4] = "";
                filas[i][5] = vectorEnfermedadYDiagnostico.get(i).
                        getEstadoEnfermedadYDiagnosticoAmbulatorio();
            }

        } else if (vectorAntecedentePersonal != null) {
            //Vector de antecedente personal
            filas = new Object[vectorAntecedentePersonal.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorAntecedentePersonal.size(); i++) {
                filas[i][0] = vectorAntecedentePersonal.get(i).
                        getIdAntecedentePersonal();
                filas[i][1] = vectorAntecedentePersonal.get(i).
                        getFechaAntecedentePersonal().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(vectorAntecedentePersonal.
                        get(i).getFechaAntecedentePersonal());
                filas[i][3] = vectorAntecedentePersonal.get(i).getCie9mc().getDetalleCie9mc();
                filas[i][5] = "No activo";
            }

        } else if (vectorAntecedenteFamiliar != null) {
            //Vector de antecedente familiar
            filas = new Object[vectorAntecedenteFamiliar.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorAntecedenteFamiliar.size(); i++) {
                filas[i][0] = vectorAntecedenteFamiliar.get(i).
                        getIdAntecedenteFamiliar();
                filas[i][1] = vectorAntecedenteFamiliar.
                        get(i).getFechaAntecedenteFamiliar().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(vectorAntecedenteFamiliar.
                        get(i).getFechaAntecedenteFamiliar());
                filas[i][3] = vectorAntecedenteFamiliar.get(i).getCie9mc().getDetalleCie9mc();
                filas[i][4] = vectorAntecedenteFamiliar.get(i).getVinculoAntecedenteFamiliar();
                filas[i][5] = "No activo";
            }
        }
        
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, false);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(
                EnfermedadYDiagnosticoAmbulatorio.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de Cie9mc con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos
     * DiagnosticoYTriageInternacion a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaDiagnosticoYTriageInternacion(
            Vector<DiagnosticoYTriageInternacion> vectorObjetos, JTable tabla) {
        Object[][] filas = null;
        Object[] columnas = {"id", "fechaEnString", "Fecha", "Diagnóstico", "Estado"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";

        } else {
            //Vector de diagnósticos y triage
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] = vectorObjetos.get(i).
                        getIdDiagnosticoYTriageInternacion();
                filas[i][1] = vectorObjetos.
                        get(i).getFechaDiagnosticoYTriageInternacion().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(vectorObjetos.
                        get(i).getFechaDiagnosticoYTriageInternacion());
                filas[i][3] = vectorObjetos.get(i).
                        getDiagnosticoDiagnosticoYTriageInternacion();
                filas[i][4] = vectorObjetos.get(i).
                        getEstadoDiagnosticoYTriageInternacion();
            }
        }

        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, false);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(
                DiagnosticoYTriageInternacion.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de Evolucion con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos EvolucionAmbulatorio
     * a cargar
     * @param tabla La tabla a cargar
     *
     */
    public static void cargarTablaEvolucion(
            Vector<Evolucion> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "fechaEnString", "Fecha",
                                "Ambulatorio/Internación"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] = vectorObjetos.get(i).getIdEvolucion();
                filas[i][1] = vectorObjetos.get(i).getFechaEvolucion().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(
                        vectorObjetos.get(i).getFechaEvolucion());
                if (vectorObjetos.get(i).getEnfermedadYDiagnosticoAmbulatorio() 
                        != null) {
                    columnas[3] = "Enfermedad";
                    filas[i][3] = vectorObjetos.get(i).
                            getEnfermedadYDiagnosticoAmbulatorio().
                            getCie9mc().getDetalleCie9mc();
                } else {
                    columnas[3] = "Diagnóstico";
                    filas[i][3] = vectorObjetos.get(i).
                            getDiagnosticoYTriageInternacion().
                            getDiagnosticoDiagnosticoYTriageInternacion();
                }
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, false);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(Evolucion.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }


    /**
     * Carga la tabla de Evolucion enfermeria de internacion
     * con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos EvolucionEnfermeriaDeInternacion
     * a cargar
     * @param tabla La tabla a cargar
     *
     */
    public static void cargarTablaEvolucionEnfermeriaDeInternacion(
            Vector<EvolucionEnfermeriaDeInternacion> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "fechaEnString", "Fecha", "Diagnóstico"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] = vectorObjetos.get(i).getIdEvolucionEnfermeriaDeInternacion();
                filas[i][1] = vectorObjetos.get(i).getFechaEvolucionEnfermeriaDeInternacion().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(
                        vectorObjetos.get(i).getFechaEvolucionEnfermeriaDeInternacion());
                filas[i][3] = vectorObjetos.get(i).
                        getDiagnosticoYTriageInternacion().
                        getDiagnosticoDiagnosticoYTriageInternacion();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, false);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(EvolucionEnfermeriaDeInternacion.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de Interconsulta por Enfermedad con los objetos pasados
     * por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos
     * InterconsultaAmbulatorio a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaInterconsulta(
            Vector<Interconsulta> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Fecha", "Profesional",
                                "Especialidad"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] =
                        vectorObjetos.get(i).getIdInterconsulta();
                filas[i][1] = CapaPresentacion.imprimirFecha(vectorObjetos.
                        get(i).getFechaInterconsulta());
                filas[i][2] = vectorObjetos.get(i).
                        getApellidoProfesionalInterconsulta()
                        + ", " + vectorObjetos.get(i).
                        getNombreProfesionalInterconsulta();
                filas[i][3] = vectorObjetos.get(i).
                        getEspecialidadInterconsulta();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);

        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(
                InterconsultaPresentacion.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }    
    
    /**
     * Carga la tabla de Farmacologico con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos Farmacologico
     * a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaFarmacologico(
            Vector<Farmacologico> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "fechaEnString", "Fecha", "Medicamento",
                                "Estado"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] =
                        vectorObjetos.get(i).getIdFarmacologico();
                filas[i][1] = vectorObjetos.
                        get(i).getFechaFarmacologico().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(vectorObjetos.
                        get(i).getFechaFarmacologico());
                filas[i][3] = vectorObjetos.get(i).getNombreComercialMedicamento().
                        getNombreNombreComercialMedicamento();
                filas[i][4] = vectorObjetos.get(i).getEstadoFarmacologico();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, false);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(Farmacologico.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de Farmacologico con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos Farmacologico
     * a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaNoFarmacologico(
            Vector<NoFarmacologico> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "fechaEnString", "Fecha", "Descripción",
                                "Estado"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] =
                        vectorObjetos.get(i).getIdNoFarmacologico();
                filas[i][1] = vectorObjetos.
                        get(i).getFechaNoFarmacologico().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(vectorObjetos.
                        get(i).getFechaNoFarmacologico());
                filas[i][3] = vectorObjetos.get(i).getDescripcionNoFarmacologico();
                filas[i][4] = vectorObjetos.get(i).getEstadoNoFarmacologico();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, false);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(NoFarmacologico.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de TratamientoMedicamentoso con los objetos pasados por
     * parámetro.
     *
     * @param vectorFarmacologico El vector que contiene las objetos Farmacologico
     * a cargar
     * @param vectorNoFarmacologico El vector que contiene las objetos NoFarmacologico
     * a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaTratamientoMedicamentoso(
            Vector<Farmacologico> vectorFarmacologico,
            Vector<NoFarmacologico> vectorNoFarmacologico, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "fechaEnString", "Fecha",
                            "Medicamento / Descripción", "Tipo", "Estado"};
        //Vector nulo
        if ((vectorFarmacologico == null  || 
                (vectorFarmacologico != null && vectorFarmacologico.isEmpty())) &&
                vectorNoFarmacologico == null || 
                (vectorNoFarmacologico != null && vectorNoFarmacologico.isEmpty())) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            int tamanioFarmacologico;
            int tamanioNoFarmacologico;
            if (vectorFarmacologico!= null) {
                tamanioFarmacologico = vectorFarmacologico.size();
            } else {
                tamanioFarmacologico = 0;
            }
            if (vectorNoFarmacologico!= null) {
                tamanioNoFarmacologico = vectorNoFarmacologico.size();
            } else {
                tamanioNoFarmacologico = 0;
            }

            filas = new Object[tamanioFarmacologico + tamanioNoFarmacologico]
                    [columnas.length];
            //Se rellena la tabla
            //Farmacologico
            for (int i = 0; i < tamanioFarmacologico; i++) {
                filas[i][0] = vectorFarmacologico.get(i).getIdFarmacologico();
                filas[i][1] = vectorFarmacologico.get(i).
                        getFechaFarmacologico().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(
                        vectorFarmacologico.get(i).getFechaFarmacologico());
                filas[i][3] = vectorFarmacologico.get(i).getNombreComercialMedicamento().
                        getNombreNombreComercialMedicamento();
                filas[i][4] = "Farmacológico";
                filas[i][5] = vectorFarmacologico.get(i).getEstadoFarmacologico();
            }
            //NoFarmacologico
            for (int j = tamanioFarmacologico; j <
                    (tamanioFarmacologico + tamanioNoFarmacologico); j++) {
                filas[j][0] = vectorNoFarmacologico.get(
                        j - tamanioFarmacologico).getIdNoFarmacologico();
                filas[j][1] = vectorNoFarmacologico.get(
                        j - tamanioFarmacologico).getFechaNoFarmacologico().toString();
                filas[j][2] = CapaPresentacion.imprimirFecha(
                        vectorNoFarmacologico.get(
                        j - tamanioFarmacologico).getFechaNoFarmacologico());
                filas[j][3] = vectorNoFarmacologico.get(
                        j - tamanioFarmacologico).getDescripcionNoFarmacologico();
                filas[j][4] = "No Farmacológico";
                filas[j][5] = vectorNoFarmacologico.get(
                        j - tamanioFarmacologico).getEstadoNoFarmacologico();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 1, false);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(TratamientoMedicamentoso.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de ExamenComplementario con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos ExamenComplementario
     * a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaExamenComplementario(
            Vector<ExamenComplementario> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Fecha", "Área"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] = vectorObjetos.get(i).getIdExamenComplementario();
                filas[i][1] = CapaPresentacion.imprimirFecha(
                        vectorObjetos.get(i).getFechaExamenComplementario());
                filas[i][2] = vectorObjetos.get(i).getAreaExamenComplementario();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);

        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(ExamenComplementario.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de TratamientoYPractica con los objetos pasados por parámetro.
     *
     * @param vectorObjetos El vector que contiene las objetos TratamientoYPractica
     * a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaTratamientoYPractica(
            Vector<TratamientoYPractica> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Fecha", "Tratamiento y práctica"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                filas[i][0] = vectorObjetos.get(i).getIdTratamientoYPractica();
                filas[i][1] = CapaPresentacion.imprimirFecha(
                        vectorObjetos.get(i).getFechaTratamientoYPractica());
                if (vectorObjetos.get(i).getTratamientoQuirurgico() != null) {
                    filas[i][2] = "Tratamiento quirúrgico";
                } else{
                    filas[i][2] = "Cuidados de internación: " +
                            vectorObjetos.get(i).getCuidadoDeInternacion().
                            getTipoCuidadoDeInternacion();
                }
                
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);

        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(ExamenComplementario.class.getName(), tabla);
        //Esconde las columna que contiene el id y la fecha en string
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Carga la tabla de Usuario con los objetos pasados por parámetro.
     *
     * @param vectorObjetos Los usuarios a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaUsuario(
            Vector<Usuario> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "Documento", "Apellido", "Nombre",
                              "Tipo de Acceso"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                //id
                filas[i][0] = vectorObjetos.get(i).getIdUsuario();
                //Documento
                filas[i][1] = CapaPresentacion.imprimirDocumento(
                        vectorObjetos.get(i).getPersona());
                //Apellido
                filas[i][2] = vectorObjetos.get(i).getPersona().getApellidoPersona();
                //Nombre
                filas[i][3] = vectorObjetos.get(i).getPersona().getNombrePersona();
                //Tipo De Acceso
                filas[i][4] = vectorObjetos.get(i).getTipoDeAccesoUsuario();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);

        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(Usuario.class.getName(), tabla);
        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }
    
    /**
     * Carga la tabla de Consentimiento Informado con los objetos pasados por 
     * parámetro.
     *
     * @param vectorObjetos Los usuarios a cargar
     * @param tabla La tabla a cargar
     */
    public static void cargarTablaDocumento(
            Vector<Documento> vectorObjetos, JTable tabla) {
        Object[][] filas;
        Object[] columnas = {"id", "fechaEnString", "Fecha", "Nombre"};
        //Vector nulo
        if (vectorObjetos == null || vectorObjetos.isEmpty()) {
            filas = new Object[1][columnas.length];
            filas[0][0] = "";
        } else {
            filas = new Object[vectorObjetos.size()][columnas.length];
            //Se rellena la tabla
            for (int i = 0; i < vectorObjetos.size(); i++) {
                //id
                filas[i][0] = vectorObjetos.get(i).getIdDocumento();
                //fecha
                filas[i][1] = vectorObjetos.get(i).getFechaDocumento().toString();
                filas[i][2] = CapaPresentacion.imprimirFecha(
                        vectorObjetos.get(i).getFechaDocumento());
                //nombre
                filas[i][3] = vectorObjetos.get(i).getNombreDocumento();
            }
        }
        //Seteo de la tabla
        ((MiModeloTabla) tabla.getModel()).setDataVector(filas, columnas);
        //Ordenamiento de las filas
        MiModeloTabla.sortAllRowsBy(
                    (MiModeloTabla) tabla.getModel(), 2, true);
        //Seteo dimensiones de las columnas
        setAnchoColumnasDeTabla(Documento.class.getName(), tabla);
        //Esconde la columna que contiene el id
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
        tabla.removeColumn(tabla.getColumnModel().getColumn(0));
    }

    /**
     * Setea el temaño de las columnas para la tabla.
     *
     * @param objeto El nombre objeto que se encuentra cargado en la tabla
     * @param tabla La tabla a la cual setear el tamaño de las columnas
     */
    private static void setAnchoColumnasDeTabla(String objeto, JTable tabla){
        JViewport scroll = (JViewport) tabla.getParent();
        int ancho = scroll.getWidth();
        int anchoColumna = 0;
        TableColumnModel modeloColumna = tabla.getColumnModel();
        TableColumn columnaTabla = null;

        if (objeto.equals(Persona.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = (15*ancho)/100;
                            break;
                    case 2: anchoColumna = (15*ancho)/100;
                            break;
                    case 3: anchoColumna = (15*ancho)/100;
                            break;
                    case 4: anchoColumna = (20*ancho)/100;
                            break;
                    case 5: anchoColumna = (20*ancho)/100;
                            break;
                    case 6: anchoColumna = (15*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(Paciente.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = (15*ancho)/100;
                            break;
                    case 2: anchoColumna = (15*ancho)/100;
                            break;
                    case 3: anchoColumna = (15*ancho)/100;
                            break;
                    case 4: anchoColumna = (20*ancho)/100;
                            break;
                    case 5: anchoColumna = (20*ancho)/100;
                            break;
                    case 6: anchoColumna = (15*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(Cie9mc.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = (20*ancho)/100;
                            break;
                    case 1: anchoColumna = (80*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(EnfermedadYDiagnosticoAmbulatorio.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (15*ancho)/100;
                            break;
                    case 3: anchoColumna = (55*ancho)/100;
                            break;
                    case 4: anchoColumna = (15*ancho)/100;
                            break;
                    case 5: anchoColumna = (15*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(DiagnosticoYTriageInternacion.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (20*ancho)/100;
                            break;
                    case 3: anchoColumna = (60*ancho)/100;
                            break;
                    case 4: anchoColumna = (20*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(Evolucion.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (20*ancho)/100;
                            break;
                    case 3: anchoColumna = (80*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(EvolucionEnfermeriaDeInternacion.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (20*ancho)/100;
                            break;
                    case 3: anchoColumna = (80*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(InterconsultaPresentacion.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (20*ancho)/100;
                            break;
                    case 3: anchoColumna = (30*ancho)/100;
                            break;
                    case 4: anchoColumna = (50*ancho)/100;
                    
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(Farmacologico.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (15*ancho)/100;
                            break;
                    case 3: anchoColumna = (70*ancho)/100;
                            break;
                    case 4: anchoColumna = (15*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(NoFarmacologico.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (15*ancho)/100;
                            break;
                    case 3: anchoColumna = (70*ancho)/100;
                            break;
                    case 4: anchoColumna = (15*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(TratamientoMedicamentoso.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (15*ancho)/100;
                            break;
                    case 3: anchoColumna = (50*ancho)/100;
                            break;
                    case 4: anchoColumna = (20*ancho)/100;
                            break;
                    case 5: anchoColumna = (15*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(AplicacionVacuna.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (20*ancho)/100;
                            break;
                    case 3: anchoColumna = (40*ancho)/100;
                            break;
                    case 4: anchoColumna = (40*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(ExamenComplementario.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = (20*ancho)/100;
                            break;
                    case 2: anchoColumna = (80*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }

        if (objeto.equals(Usuario.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = (20*ancho)/100;
                            break;
                    case 2: anchoColumna = (30*ancho)/100;
                            break;
                    case 3: anchoColumna = (30*ancho)/100;
                            break;
                    case 4: anchoColumna = (20*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }
        
        if (objeto.equals(Documento.class.getName())) {
            for (int i = 0; i < tabla.getColumnCount(); i++) {
                columnaTabla = modeloColumna.getColumn(i);
                switch(i){
                    case 0: anchoColumna = 0;
                            break;
                    case 1: anchoColumna = 0;
                            break;
                    case 2: anchoColumna = (20*ancho)/100;
                            break;
                    case 3: anchoColumna = (80*ancho)/100;
                            break;
                }
                columnaTabla.setPreferredWidth(anchoColumna);
            }
        }
    }

    /**
     * Recupera el objeto que se seleccionó de la tabla.
     *
     * @param objeto El tipo de objeto a recuperar
     * @param tabla La tabla donde se seleccionó el objeto
     * @return El objeto seleccionado, null si no se seleccionó ningún objeto
     */
    public static Object recuperarObjetoDeTabla(String objeto, JTable tabla) {

        Object objetoSeleccionado = null;
        int[] seleccion = tabla.getSelectedRows();

        int i = -1;

        if (seleccion.length != 0) {
            i = seleccion[0];
            //Permite buscar el indice de manera dinánica si hubo ordenamiento
            i = tabla.convertRowIndexToModel(i);
            if (!tabla.getModel().getValueAt(i, 0).equals("")) {
                if (objeto.equals(Persona.class.getName())) {
                    objetoSeleccionado = PersonaLogica.getPersonaPorIdYEnBd(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(Paciente.class.getName())) {
                    objetoSeleccionado = PacienteLogica.getPacientePorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if(objeto.equals(ObraSocial.class.getName())) {
                    objetoSeleccionado = ObraSocialLogica.getObraSocialPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(Cie9mc.class.getName())) {
                    objetoSeleccionado =  Cie9mcLogica.getCie9mcPorCodigo(
                            tabla.getModel().getValueAt(i, 0).toString());
                }

                if (objeto.equals(Vacuna.class.getName())) {
                    objetoSeleccionado = VacunaLogica.getVacunaPorIdEnBd(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(AplicacionVacuna.class.getName())) {
                    objetoSeleccionado = AplicacionVacunaLogica.
                            getAplicacionVacunaPorIdEnBd(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(NombreComercialMedicamento.class.getName())) {
                    objetoSeleccionado = NombreComercialMedicamentoLogica.
                            getNombreComercialMedicamentoPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(PrincipioActivoMedicamento.class.getName())) {
                    objetoSeleccionado = PrincipioActivoMedicamentoLogica.
                            getPrincipioActivoMedicamentoPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(LaboratorioMedicamento.class.getName())) {
                    objetoSeleccionado = LaboratorioMedicamentoLogica.
                            getLaboratorioMedicamentoPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(GrupoTerapeuticoMedicamento.class.getName())) {
                    objetoSeleccionado = GrupoTerapeuticoMedicamentoLogica.
                            getGrupoTerapeuticoMedicamentoPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(EnfermedadYDiagnosticoAmbulatorio.class.getName())) {
                    objetoSeleccionado = EnfermedadYDiagnosticoAmbulatorioLogica.
                            getEnfermedadYDiagnosticoAmbulatorioPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(DiagnosticoYTriageInternacion.class.getName())) {
                    objetoSeleccionado = DiagnosticoYTriageInternacionLogica.
                            getDiagnosticoYTriageInternacionPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(Evolucion.class.getName())) {
                    objetoSeleccionado = EvolucionLogica.
                            getEvolucionPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(EvolucionEnfermeriaDeInternacion.class.getName())) {
                    objetoSeleccionado = EvolucionEnfermeriaDeInternacionLogica.
                            getEvolucionEnfermeriaDeInternacionPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(Interconsulta.class.getName())) {
                    objetoSeleccionado = InterconsultaLogica.
                            getInterconsultaPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(Farmacologico.class.getName())) {
                    objetoSeleccionado = FarmacologicoLogica.
                            getFarmacologicoPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(NoFarmacologico.class.getName())) {
                    objetoSeleccionado = NoFarmacologicoLogica.
                            getNoFarmacologicoPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(AntecedentePersonal.class.getName())) {
                    objetoSeleccionado = AntecedentePersonalLogica.
                            getAntecedentePersonalPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(AntecedenteFamiliar.class.getName())) {
                    objetoSeleccionado = AntecedenteFamiliarLogica.
                            getAntecedenteFamiliarPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(ExamenComplementario.class.getName())) {
                    objetoSeleccionado = ExamenComplementarioLogica.
                            getExamenComplementarioPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(Usuario.class.getName())) {
                    objetoSeleccionado = UsuarioLogica.
                            getUsuarioPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(TratamientoYPractica.class.getName())) {
                    objetoSeleccionado = TratamientoYPracticaLogica.
                            getTratamientoYPracticaPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }
                
                if (objeto.equals(Documento.class.getName())) {
                    objetoSeleccionado = DocumentoLogica.
                            getDocumentoPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                if (objeto.equals(EvolucionEnfermeriaDeInternacion.class.getName())) {
                    objetoSeleccionado = EvolucionEnfermeriaDeInternacionLogica.
                            getEvolucionEnfermeriaDeInternacionPorId(
                            (Integer) tabla.getModel().getValueAt(i, 0));
                }

                return objetoSeleccionado;
            }
        }

        return null;
    }

    /**
     * Selecciona de la tabla una fila.
     *
     * @param id El id del Objeto
     * @param tabla La tabla que contiene la fila a seleccionar
     */
    public static boolean seleccionarFilaDeTabla(String id, JTable tabla,
            JScrollPane scrollPane){
        if (!id.isEmpty()) {
            int numeroFila = -1;

            //Busco el índice de la fila a seleccionar
            for (int i = 0; i < tabla.getRowCount(); i++) {
                if (tabla.getModel().getValueAt(i, 0).toString().
                        equalsIgnoreCase(id)) {
                    numeroFila = i;
                    break;
                }
            }

            //Selecciona el índice 
            if (numeroFila != -1) {
                tabla.setRowSelectionInterval(numeroFila, numeroFila);

                if (scrollPane != null) {
                    // Nos devuelve la posición en pixels de una celda en fila,columna
                    Rectangle r = tabla.getCellRect(
                            tabla.getSelectedRows()[0], 0, true);
                    // Mueve el scroll para que el rectangulo sea visible
                    scrollPane.getViewport().scrollRectToVisible(r);
                }
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }    

    /**
     * Inicializa la tabla con las opciones más comunes.
     *
     * @param tabla La tabla a inicializar
     */
    public static void inicializarTabla(JTable tabla) {
        //Fuente
        tabla.setFont(Fuente.FUENTE_TABLE);
        tabla.setForeground(Fuente.COLOR_NORMAL);

        //Tipo de selección
        tabla.setSelectionMode(
                javax.swing.ListSelectionModel.SINGLE_SELECTION);

        //Líneas en la tabla
        tabla.setShowHorizontalLines(false);
        tabla.setShowVerticalLines(false);

        //No permite intercambio de posición de columnas
        tabla.getTableHeader().setReorderingAllowed(false);

        //Permite el orden ascendente y descendente de manera visual
        TableRowSorter<MiModeloTabla> elQueOrdena =
                new TableRowSorter<MiModeloTabla>((MiModeloTabla) tabla.getModel());
        tabla.setRowSorter(elQueOrdena);
    }

    /**
     * Se redefine el método para que las celdas no sean editables.
     *
     * @param i La fila
     * @param j La columna
     * @return false (no se puede editar)
     */
    public boolean isCellEditable(int i, int j) {
        return false;
    }

    /**
     * Regardless of sort order (ascending or descending), null values always
     * appear last.
     *
     * @param model The model
     * @param colIndex specifies a column in model.
     * @param ascending
     */
    public static void sortAllRowsBy(MiModeloTabla model, int colIndex,
            boolean ascending) {
        Vector data = model.getDataVector();
        Collections.sort(data, new ColumnSorter(colIndex, ascending));
        model.fireTableStructureChanged();
    }

    // This comparator is used to sort vectors of data
    public static class ColumnSorter implements Comparator {
        int colIndex;
        boolean ascending;
        ColumnSorter(int colIndex, boolean ascending) {
            this.colIndex = colIndex;
            this.ascending = ascending;
        }
        public int compare(Object a, Object b) {
            Vector v1 = (Vector)a;
            Vector v2 = (Vector)b;
            Object o1 = v1.get(colIndex);
            Object o2 = v2.get(colIndex);

            // Treat empty strains like nulls
            if (o1 instanceof String && ((String)o1).length() == 0) {
                o1 = null;
            }
            if (o2 instanceof String && ((String)o2).length() == 0) {
                o2 = null;
            }

            // Sort nulls so they appear last, regardless
            // of sort order
            if (o1 == null && o2 == null) {
                return 0;
            } else if (o1 == null) {
                return 1;
            } else if (o2 == null) {
                return -1;
            } else if (o1 instanceof Comparable) {
                if (ascending) {
                    return ((Comparable)o1).compareTo(o2);
                } else {
                    return ((Comparable)o2).compareTo(o1);
                }
            } else {
                if (ascending) {
                    return o1.toString().compareTo(o2.toString());
                } else {
                    return o2.toString().compareTo(o1.toString());
                }
            }
        }
    }

    /**
     * Selecciona la fila anterior de la tabla.
     *
     * @param objeto El tipo de objeto a seleccionar
     * @param tabla La tabla donde se seleccionó el objeto
     */
    public static void seleccionarFilaAnterior(String objeto, JTable tabla) {

        if (MiModeloTabla.recuperarObjetoDeTabla(
                objeto, tabla) != null) {
            int[] seleccion = tabla.getSelectedRows();
            int index = seleccion[0];
            if (index > 0) {
                index--;
                tabla.setRowSelectionInterval(
                        index, index);
            }
        }
    }

    /**
     * Selecciona la fila siguiente de la tabla.
     *
     * @param objeto El tipo de objeto a seleccionar
     * @param tabla La tabla donde se seleccionó el objeto
     */
    public static void seleccionarFilaSiguiente(String objeto, JTable tabla) {
        if (MiModeloTabla.recuperarObjetoDeTabla(
                objeto, tabla) != null) {
            int[] seleccion = tabla.getSelectedRows();
            int index = seleccion[0];
            if (index < tabla.getRowCount()-1) {
                index++;
                tabla.setRowSelectionInterval(
                        index, index);
            }
        }
    }

}
